#include <iostream>


class Test
{
public:
    //初始化列表 : 1、常成员变量只能在初始化列表中进行初始化赋值
    //             2、括号外的一定是成员变量，括号内的一定是形参
    //             3、引用成员也必须要在初始化列表中初始化
    Test(int b,double c):a(10),b(b),c(c),d(b)
    {
    }

    void show()
    {
        std::cout<<a<<std::endl;
    }

    //const修饰函数

    //修饰返回值
    const Test& get()  //防止返回的引用对原对象的修改
    {
        return *this;
    }

    //修饰形参
    // void Test(const Test& t)  //保护传入的引用修改原对象
    // {
    // }

    const Test& func(const Test &t)const  //常成员函数 : 不能对对象的成员变量进行任何修改
    {
       return t;
    }
private:
    const int a; //常成员变量
    //int &d; //引用成员
    int b;
    double c;
};

int main()
{
    Test t(1,3.14);
    const Test& t1 = t.get(); //获取常引用
    t.show();
    return 0;
}